package com.wpr.shop.utils;

import com.wpr.shop.modules.global.validate.ErrorCode;
import com.wpr.shop.modules.global.vo.CommonResp;
import java.util.HashMap;
import java.util.Map;

/**
 * Discribe:返回结果集封装
 */
public final class ResultUtil {
	
	/**
     * 将ERROR直接 set到 meta里
     * @return
     */
    public static <T> CommonResp<T> setResult(CommonResp<T> commonResp){
        return commonResp;
    }

    /**
     * 将ERROR直接 set到 meta里
     * @param errorCode 错误码及描述
     * @return
     */
    public static <T> CommonResp<T> setResult(ErrorCode errorCode){
        CommonResp<T> resp = new CommonResp<T>(errorCode.getValue(),errorCode.getComment());
        return resp;
    }

    /**
     * 将ERROR直接 set到 meta里
     * @param errorCode 错误码及描述
     * @param data
     * @return
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public static  CommonResp setResult(ErrorCode errorCode,Object data){
		CommonResp resp = new CommonResp(errorCode.getValue(),errorCode.getComment(),data);
        return resp;
    }


    /**
     * 将ERROR直接 set到 meta里
     * @param errorCode 错误码及描述
     * @param resp
     * @return
     */
    public static <T> CommonResp<T> setResult(CommonResp<T> resp,ErrorCode errorCode){
        resp.getMeta().setEcode(errorCode.getValue());
        resp.getMeta().setEmsg(errorCode.getComment());
        return resp;
    }

    /**
     * 将ERROR直接 set到 meta里
     * @param resp
     * @param errorCode 错误码及描述
     * @param msg
     * @return
     */
    public static <T> CommonResp<T> setResult(CommonResp<T> resp,int errorCode,String msg){
        resp.getMeta().setEcode(errorCode);
        resp.getMeta().setEmsg(msg);
        return resp;
    }
    
    /**
     * 将ERROR、DATA放入RESPONSE
     * @param resp
     * @param errorCode 错误码及描述
     * @param data
     * @return
     */
    public static <T> CommonResp<T> setResult(CommonResp<T> resp, ErrorCode errorCode, T data){
    	resp.getMeta().setEcode(errorCode.getValue());
    	resp.getMeta().setEmsg(errorCode.getComment());
    	resp.setData(data);
    	return resp;
    }
    
    /**
     * 将ERROR、DATA放入RESPONSE
     * @param resp
     * @param errorCode 错误码及描述
     * @param data
     * @return
     */
    public static <T> CommonResp<T> setResult(CommonResp<T> resp, int errorCode, String msg, T data){
    	resp.getMeta().setEcode(errorCode);
    	resp.getMeta().setEmsg(msg);
    	resp.setData(data);
    	return resp;
    }
    
    /**
     * EORROR放到对应key结果
     * @param key
     * @param errorCode 错误码及描述
     * @return
     */
    public static Map<String,Object> setResult(String key, ErrorCode errorCode, Map<String, Object> result){
    	if (null == result) {
    		result = new HashMap<>();
    	}
    	Map<String, Object> meta = new HashMap<String, Object>();
    	meta.put("ecode", errorCode.getValue());
        meta.put("emsg", errorCode.getComment());
        result.put(key, meta);
    	return result;
    }
    
    /**
     * EORROR放到对应key结果
     * @param key
     * @param errorCode 错误码及描述
     * @return
     */
    public static Map<String,Object> setResult(String key, int errorCode, String msg, Map<String, Object> result){
    	if (null == result) {
    		result = new HashMap<>();
    	}
    	Map<String, Object> meta = new HashMap<String, Object>();
    	meta.put("ecode", errorCode);
        meta.put("emsg", msg);
        result.put(key, meta);
    	return result;
    }

    @Override
    public String toString() {
        return JsonUtil.obj2Json(this);
    }
}